﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Guada
{
    public partial class FrmBuscarPaciente : Form
    {
        private string documento;
        private bool estado;
        private DataTable Dt = new DataTable();

        public FrmBuscarPaciente(bool bEstado)
        {
            estado = bEstado;
            InitializeComponent();
        }

        private void FrmBuscarPaciente_Load(object sender, EventArgs e)
        {

            if (!estado)
            {
                btnMostrar.Visible = false;
                BtnCancelar.Text = "Volver";
            }
            IniciarCarga();
        }

        private void IniciarCarga()
        {
            FacProFacu.Paciente paciente = new FacProFacu.Paciente();
            
            Dt = paciente.GetDatosPaciente().Tables["PACIENTE"];
            if (Dt.Rows.Count > 0)
            {
                CargarDgPacientes(Dt);
            }
            else
            {
                MessageBox.Show("No existen pacientes cargados en el sistema.", "INFORMACION", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void CargarDgPacientes(DataTable Dt)
        {
            try
            {
                dgPacientes.DataSource = Dt;
                DataGridViewColumn col;
                dgPacientes.AutoGenerateColumns = false;
                dgPacientes.Columns.Clear();
                dgPacientes.ForeColor = Color.Black;

                col = new DataGridViewTextBoxColumn();
                col.DataPropertyName = "CODIGO";
                col.Name = "CODIGO";
                col.Width = 80;
                col.HeaderText = "CODIGO";
                col.ReadOnly = true;
                dgPacientes.Columns.Add(col);
                col.Visible = true;

                col = new DataGridViewTextBoxColumn();
                col.DataPropertyName = "PACIENTE";
                col.Name = "PACIENTE";
                col.Width = 200;
                col.HeaderText = "PACIENTE";
                col.ReadOnly = true;
                dgPacientes.Columns.Add(col);
                col.Visible = true;

                col = new DataGridViewTextBoxColumn();
                col.DataPropertyName = "DOCUMENTO";
                col.Name = "DOCUMENTO";
                col.Width = 100;
                col.HeaderText = "DOCUMENTO";
                col.ReadOnly = true;
                dgPacientes.Columns.Add(col);
                col.Visible = true;

                col = new DataGridViewTextBoxColumn();
                col.DataPropertyName = "COBERTURA";
                col.Name = "COBERTURA";
                col.Width = 180;
                col.HeaderText = "COBERTURA";
                col.ReadOnly = true;
                dgPacientes.Columns.Add(col);

                col = new DataGridViewTextBoxColumn();
                col.DataPropertyName = "AFILIADO";
                col.Name = "AFILIADO";
                col.Width = 100;
                col.HeaderText = "AFILIADO";
                col.ReadOnly = true;
                dgPacientes.Columns.Add(col);

                if (((DataTable)dgPacientes.DataSource).Rows.Count > 0)
                    dgPacientes.Rows[0].Selected = true;
            }
            catch { }
        }

        private void FiltrarDatos()
        {
            StringBuilder filtro = new StringBuilder();
            if (txtNumDoc.Text.Length > 0)
            {
                filtro.Append(" DOCUMENTO like '%" + txtNumDoc.Text + "%'");
            }
            if (txtNombre.Text.Length > 0)
            {
                if (filtro.Length > 0)
                {
                    filtro.Append(" and ");
                }
                filtro.Append(" PACIENTE like '%" + txtNombre.Text + "%'");
            }
            if (txtObraSocial.Text.Length > 0)
            {
                if (filtro.Length > 0)
                {
                    filtro.Append(" and ");
                }
                filtro.Append(" AFILIADO like '%" + txtObraSocial.Text + "%'");
            }
            if (txtNumDoc.Text.Length < 1 && txtNombre.Text.Length < 1 && txtObraSocial.Text.Length < 1)
            {
                IniciarCarga();
            }
            else
            {
                Dt.DefaultView.RowFilter = filtro.ToString();
                dgPacientes.DataSource = Dt.DefaultView;
            }
        }

        private void txtNumDoc_TextChanged(object sender, EventArgs e)
        {
            if (txtNumDoc.Text.Length < 1 && txtNombre.Text.Length < 1 && txtObraSocial.Text.Length < 1)
            {
                IniciarCarga();
            }
            else
            {
                FiltrarDatos();
            }
        }

        private void txtNombre_TextChanged(object sender, EventArgs e)
        {
            if (txtNumDoc.Text.Length < 1 && txtNombre.Text.Length < 1 && txtObraSocial.Text.Length < 1)
            {
                IniciarCarga();
            }
            else
            {
                FiltrarDatos();
            }
        }

        private void txtObraSocial_TextChanged(object sender, EventArgs e)
        {
            if (txtNumDoc.Text.Length < 1 && txtNombre.Text.Length < 1 && txtObraSocial.Text.Length < 1)
            {
                IniciarCarga();
            }
            else
            {
                FiltrarDatos();
            }
        }

        private void BtnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnMostrar_Click(object sender, EventArgs e)
        {
            AsignarSeleccion();
        }

        internal void AsignarSeleccion()
        {
            if (dgPacientes.RowCount > 0)
            {
                documento = dgPacientes.Rows[dgPacientes.CurrentRow.Index].Cells[2].Value.ToString();
            }
            else 
            {
                documento = null;
            }
            this.Visible = false;
        }

        internal string GetDocumento()
        {
            return documento;
        }

        private void dgPacientes_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            AsignarSeleccion();
        }
    }
}
